﻿
#pragma once
#include "context.h"

// runtime 类继承自 context 类，表示一个具体的运行时环境
class runtime : public context
{
    // 指向实际市场对象的指针，类型为 actual_market
    class actual_market* _market;

    // 指向实际交易者对象的指针，类型为 actual_trader
    class actual_trader* _trader;

public:
    // 构造函数，初始化 _market 和 _trader 指针为 nullptr
    runtime() noexcept;

    // 析构函数，负责销毁 _market 和 _trader 对象
    virtual ~runtime() noexcept;

public:
    // 从配置文件初始化运行时对象
    // 参数 config_path 为配置文件的路径
    // 返回值表示初始化是否成功
    bool init_from_file(const std::string& config_path) noexcept;

    // 登录交易账户
    // 返回值表示登录是否成功
    bool login_account() noexcept;

    // 登出交易账户
    void logout_account() noexcept;

    // 获取交易者 API 的引用
    // 重写基类 context 中的虚函数
    // 返回值为 trader_api 类型的引用
    virtual trader_api& get_trader() noexcept override;

    // 获取市场 API 的引用
    // 重写基类 context 中的虚函数
    // 返回值为 market_api 类型的引用
    virtual market_api& get_market() noexcept override;

    // 周期性更新操作
    // 重写基类 context 中的虚函数
    // 该函数可能用于处理定时任务或状态刷新
    virtual void on_update() noexcept override;

    // 检查运行时是否已终止
    // 重写基类 context 中的虚函数
    // 返回值为 true 表示运行时已终止，false 表示仍在运行
    virtual bool is_terminaled() noexcept override;
};

: pu